package cn.tedu.apiday03;

import java.io.*;

public class IoFileInputStream {//测试字节读取流

    public static void main(String[] args) throws IOException {
        method();//FileInputStream读取
        method1();//BufferedInputStream读取

    }
//从读取效率上来讲BufferedInputStream>FileInputStream
    //BufferedInputStream底层源码展示：为了一个byte[]，优化了把磁盘中数据读取到流里的过程，把数组读满了
    //一次性给Java程序展示，这个过程中减少了交互，提高效率
    //底层维护的数组，默认大小是8192，相当于8*1024字节= 8k.可以存储8k的数据
    private static void method1() throws IOException {
        InputStream in = new BufferedInputStream(new FileInputStream("E:\\360downloads\\520.txt"));
        InputStream in1= new BufferedInputStream(new FileInputStream(new File("E:\\360downloads\\520.txt")));
        int b = 0;//定义变量 记录read（）读到的值
        while ((b =in.read()) != -1){//就是一个字节一个字节从读取流中获取数据
            System.out.println(b);//打印获取到的数据
        }
        in.close();
    }

    private static void method() throws IOException {
        //1 创建对象，参数就是字符串类型的路劲名称   多态   统一调用标准，标准是父类
        InputStream in = new FileInputStream("E:\\360downloads\\520.txt");//触发了String类型的构造方法
//        File file = new File("E:\\360downloads\\520.txt");//这有个人file变量
//        InputStream in2 = new FileInputStream(file);//触发了File类型的构造方法
        InputStream in3 = new FileInputStream(new File("E:\\360downloads\\520.txt"));//触发了File类型的构造方法  匿名对象
        //2 开始读取
//        int b = in.read();//把数据从读取流中一个字节一个字节拿到
//        System.out.println(b);
//        int c = in.read();
//        System.out.println(c);
//        int d = in.read();
//        System.out.println(d);
//        //当数据读完了时，永远返回-1
//        System.out.println(in.read());
//        System.out.println(in.read());
//        System.out.println(in.read());
        //改造  就想重复的read（）
        //while（只要有数据，也就是读到的不是-1）{一直读}
        int b = 0;//定义变量 记录read（）读到的值
        while ((b =in.read()) != -1){//就是一个字节一个字节从读取流中获取数据
            System.out.println(b);//打印获取到的数据
        }
        //3 释放资源
        in.close();







    }


}
